package com.xxxtea.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.xxxtea.common.anno.AutowiredUserId;
import com.xxxtea.common.anno.DeserializeOnly;
import com.xxxtea.dto.Location;
import com.xxxtea.mpe.handler.AttachmentHandler;
import com.xxxtea.mpe.model.Attachment;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * 商家实体类
 *
 * 用于存储商家的基本信息，包括：
 * - 商家基本信息（名称、头像、地址等）
 * - 商家评分和配送信息
 * - 位置信息和公告管理
 * - 距离计算和收藏状态
 *
 * 使用MyBatis-Plus注解进行数据库映射
 * 使用Swagger注解进行API文档生成
 *
 * @author badman
 * @since 1.0.0
 */
@Data
@ApiModel("商家")
@TableName(autoResultMap = true)
public class Merchant {

	/**
	 * 主键ID
	 * 使用自增策略
	 */
	@ApiModelProperty("主键")
	@TableId(value = "id", type = IdType.AUTO)
	private Integer id;

	/**
	 * 用户ID
	 * 自动注入当前用户ID
	 */
	@AutowiredUserId
	private Integer userId;

	/**
	 * 商家名称
	 */
	@ApiModelProperty("商家名称")
	private String name;

	/**
	 * 商家头像
	 * 使用自定义处理器处理头像附件
	 */
	@ApiModelProperty("商家头像")
	@TableField(typeHandler = AttachmentHandler.class)
	private Attachment avatar;

	/**
	 * 商家评分
	 * 用户对商家的平均评分
	 */
	@ApiModelProperty("评分")
	private Double rating;

	/**
	 * 商家地址
	 * 商家的详细地址
	 */
	@ApiModelProperty("商家地址")
	private String address;

	/**
	 * 商家经纬度
	 * 商家的地理位置坐标
	 */
	@ApiModelProperty("商家经纬度")
	private Location location;

	/**
	 * 配送时间
	 * 商家的配送时间说明
	 */
	@ApiModelProperty("配送时间")
	private String deliveryTime;

	/**
	 * 商家公告
	 * 商家的公告信息
	 */
	@ApiModelProperty("商家公告")
	private String announcement;

	/**
	 * 创建时间
	 * 自动填充插入时间
	 */
	@ApiModelProperty("创建时间")
	@TableField(fill = FieldFill.INSERT)
	private Date createTime;

	/**
	 * 是否计算距离
	 * 仅用于反序列化，查询条件
	 */
	@DeserializeOnly
	private boolean calDistance;

	/**
	 * 距离
	 * 非数据库字段，用于显示与用户的距离
	 */
	@TableField(exist = false)
	private String distance;

	/**
	 * 是否已收藏
	 * 非数据库字段，用于前端显示收藏状态
	 */
	@TableField(exist = false)
	private boolean collect;
}